//////////////////////////////////////////////////////////////////////////

#ifndef _SWEAPON_H_
#include "sweapon.h"
#endif

////////////////////////////////////////////////////////////////////////////////

int defaultSWeaponID = 0;
int defaultSWeaponReloadTime = 300;

const float defaultBulletVelocity = 0.2f;
const int defaultBulletDamage = 10;


//////////////////////////////////////////////////////////////////////////


SWeapon::SWeapon( size_t _reloadTime )
: Weapon(_reloadTime),
  m_TimeLeftBeforeCanShoot( GetReloadTime() )
{
}


//////////////////////////////////////////////////////////////////////////


SWeapon::~SWeapon()
{
}


//////////////////////////////////////////////////////////////////////////


SBullet SWeapon::Shoot( int _playerID,
                        const PE::Point& _position,
                        const PE::Direction& _direction )
{
    PE::Vector velocity = { _direction.dx * defaultBulletVelocity,
                            _direction.dy * defaultBulletVelocity };

    // Generate mysterious ID 
    static int bulletId = 0;
    ++bulletId;

    SBullet bullet( bulletId, _playerID );

    PE::Point position(_position.x, _position.y);
    position.x += velocity.vx * 100;
    position.y += velocity.vy * 100;

    bullet.SetPosition(position);
    bullet.SetVelocity(velocity);

    // Reload weapon after shooting
    m_TimeLeftBeforeCanShoot = GetReloadTime();

    return bullet;
}


//////////////////////////////////////////////////////////////////////////


bool SWeapon::IsReloading() const
{
    return m_TimeLeftBeforeCanShoot > 0;
}


//////////////////////////////////////////////////////////////////////////


void SWeapon::UpdateTime( size_t _dt )
{
    m_TimeLeftBeforeCanShoot -= _dt;
}


//////////////////////////////////////////////////////////////////////////
